package cn.tedu.straw.redis.tag.scheduled;

import cn.tedu.straw.commons.vo.TagVO;
import cn.tedu.straw.redis.tag.service.ITagService;
import cn.tedu.straw.redis.tag.utils.RedisUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@Slf4j
public class TagScheduled {
    @Autowired
    private ITagService tagService;
    @Autowired
    private RedisUtils redisUtils;

    // 只要添加了@Scheduled注解，就是计划任务方法
    // 在Scheduled注解中配置的fixedRate表示执行频率，以毫秒为单位
    // 关于计划任务的方法
    // - 应该使用public权限
    // - 应该使用void表示返回类型
    // - 方法名称可以自定义
    // - 参数列表应该为空
    @Scheduled(fixedRate = 10 * 60 * 1000)
    public void loadTags() {
        //向Redis中存入数据的Key
        String key = "tags";
        //清除Redis服务器中名为tags的数据，避免反复向List类型中的数据中插入重复数据
        //redisTemplate.delete(key);
        redisUtils.delete(key);
        //从数据库中查询tag列表
        List<TagVO> tags = tagService.getTagList();
        //获取Redis中操作List类型数据的操作器
        //ListOperations ops = redisTemplate.opsForList();
        //遍历查询到Tag列表中
        for (TagVO tag : tags) {
            //将标签数据保存到Redis中，一次只能存一个
            redisUtils.rightPushListItem(key, tag);
            //将Tag数据独立的存到Redis中，便于后续根据id获取数据
            redisUtils.set("tag:"+tag.getId(),tag);
        }
    }
}
